<?php

Class Mcuenta extends CI_Model {

    /**
     * Carga los datos de las cuentas de un cliente y los devuelve en forma de array de objetos
     *
     * @param string $idCliente
     * @return mixed
     */
    public function misCuentas($idCliente) {
        $this->db->select('cuenta.id, cuenta.codigoEntidad, cuenta.codigoOficina, cuenta.codigoControl, cuenta.codigoCuenta, cuenta.saldo');
        $this->db->from('cuentacliente, cuenta');
        $this->db->where('cuentacliente.idCuenta = cuenta.id');
        $this->db->where('cuentacliente.idCliente = ' . $idCliente);
        $misCuentas = $this->db->get();
        return $misCuentas->result();
    }

    /**
     * Carga los datos de una cuenta y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function getCuentaPorId($idCuenta) {
        $this->db->select('id, codigoEntidad, codigoOficina, codigoControl, codigoCuenta, saldo');
        $this->db->from(' cuenta');
        $this->db->where('id = ' . $idCuenta);
        $misCuentas = $this->db->get();
        return $misCuentas->result();
    }

    /**
     * Carga los datos de los ultmos 5 movimientos de una cuenta y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function ultimosMovimientos($idCuenta) {
        $this->db->select('movimiento.importe, date_format(movimiento.fecha, "%d/%m/%Y") as fecha, movimiento.descripcion, movimiento.concepto, movimiento.resto', false);
        $this->db->from('movimiento');
        $this->db->where('movimiento.idCuenta = ' . $idCuenta);
        $this->db->order_by('movimiento.fecha', 'desc');
        $this->db->limit(5);
        $misMovimientos = $this->db->get();
        return $misMovimientos->result();
    }

    /**
     * Carga los datos de los movimientos de una cuenta, ordenados por fecha y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function movimientos($idCuenta) {
        $this->db->select('movimiento.id, movimiento.descripcion, date_format(movimiento.fecha, "%d/%m/%Y") as fecha, ifnull(movimiento.concepto, "") as concepto, movimiento.importe, movimiento.resto', false);
        $this->db->from('movimiento');
        $this->db->where('movimiento.idCuenta = ' . $idCuenta);
        $this->db->order_by('movimiento.fecha', 'desc');
        $misMovimientos = $this->db->get();
        return $misMovimientos->result();
    }

    /**
     * Carga los datos de los movimientos de una cuenta para las graficas y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function movimientosGraficas($idCuenta) {
        $this->db->select('date_format(movimiento.fecha, "%d/%m/%Y") as fecha, SUM(movimiento.importe) as importe, movimiento.resto', false);
        $this->db->from('movimiento');
        $this->db->where('movimiento.idCuenta = ' . $idCuenta);
        $this->db->order_by('movimiento.fecha', 'desc');
        $this->db->group_by('date(movimiento.fecha)');
        $misMovimientos = $this->db->get();
        return $misMovimientos->result();
    }

    /**
     * Carga los datos de los movimientos de una cuenta, en AJAX y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function movimientosAjax($idCuenta) {
        $this->load->library('Datatables');
        $this->datatables
                ->select('movimiento.id as id, movimiento.descripcion, date_format(movimiento.fecha, "%d/%m/%Y") as fecha, ifnull(movimiento.concepto, "") as concepto,  CONCAT(FORMAT(movimiento.importe,2,"de_DE"), " &euro;") importe, CONCAT(FORMAT(movimiento.resto,2,"de_DE"), " &euro;") resto', false)
                ->from('movimiento')
                ->where('movimiento.idCuenta = ' . $idCuenta)
                ->order_by('movimiento.fecha', 'desc');
        return $this->datatables->generate();
    }

    /**
     * Carga los datos de una transferencia y los devuelve en forma de array de objetos
     *
     * @param string $idMovimiento
     * @return mixed
     */
    public function getTransferencia($idMovimiento) {
        //id, idMovimiento, idCuentaOrigen, cuentaDestino, porCuentaDe, referencia, beneficiario, conceptoAd
        $this->db->select('cuentaDestino, porCuentaDe, referencia, beneficiario, conceptoAd');
        $this->db->from('transferencia');
        $this->db->where('idMovimiento = ' . $idMovimiento);
        return $this->db->get()->result();
    }

    /**
     * Carga los datos de las cuentas y sus titulares y los devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function infoCuenta($idCuenta) {
        $this->db->select('cuenta.codigoEntidad, cuenta.codigoOficina, cuenta.codigoControl, cuenta.codigoCuenta, cuenta.saldo, cliente.nombre, cliente.apellidos');
        $this->db->from('cuenta, cliente, cuentacliente');
        $this->db->where('cuenta.id = ' . $idCuenta);
        $this->db->where('cuentacliente.idCuenta = cuenta.id');
        $this->db->where('cuentacliente.idCliente = cliente.id');
        return $this->db->get()->result();
    }

    /**
     * Comprueba si existe una cuenta concreta, segun su entidad, oficina, codigo de control y codigo de cuenta y devuelve un numero
     *
     * @param string $entidad
     * @param string $oficina
     * @param string $control
     * @param string $cuenta
     * @return integer
     */
    public function existCuenta($entidad, $oficina, $control, $cuenta) {
        $this->db->select(' count(*) as num ');
        $this->db->from(' santander.cuenta ');
        $this->db->where('cuenta.codigoEntidad = ' . $entidad);
        $this->db->where('cuenta.codigoOficina = ' . $oficina);
        $this->db->where('cuenta.codigoControl = ' . $control);
        $this->db->where('cuenta.codigoCuenta = ' . $cuenta);
        $resultado = $this->db->get();
        $res = $resultado->result();
        return $res[0]->num;
    }

    /**
     * Carga los datos de una cuenta segun su entidad, oficina, codigo de control y codigo cuenta, y devuelve su identificador
     *
     * @param string $entidad
     * @param string $oficina
     * @param string $control
     * @param string $cuenta
     * @return integer
     */
    public function dameIdCuenta($entidad, $oficina, $control, $cuenta) {
        $this->db->select(' id ');
        $this->db->from(' santander.cuenta ');
        $this->db->where('codigoEntidad = ' . $entidad . ' and  codigoOficina = ' . $oficina . ' and codigoControl = ' . $control . ' and codigoCuenta = ' . $cuenta . ' ');
        $resultado = $this->db->get();
        $res = $resultado->result();
        return $res[0]->id;
    }

    /**
     * Carga el saldo de una cuenta y lo devuelve en forma de array de objetos
     *
     * @param string $idCuenta
     * @return mixed
     */
    public function getSaldo($idCuenta) {
        $this->db->select('cuenta.saldo');
        $this->db->from('cuenta');
        $this->db->where('cuenta.id = ' . $idCuenta);
        return $this->db->get()->result();
    }

    /**
     * Recibe los datos de un movimiento y hace los inserta en la BBDD.
     *
     * @param mixed $data
     */
    public function insertMovimiento($data) {
        if (isset($data['cuenta'])) {
            $strId = preg_split('[#]', $data['cuenta'], null, PREG_SPLIT_NO_EMPTY);
        } else {
            $strId[0] = $data['transferenciaHabitual'];
        }
        $dblImporte = (double) str_replace(",", ".", str_replace(".", "", $data['txtImporte']));
        if ($dblImporte > 0) {
            $dblImporte = $dblImporte * (-1);
        }
        $this->db->query("insert into movimiento(idCuenta, importe, descripcion, concepto)
        values (" . $strId[0] . "," . $dblImporte . ",'Transferencia " . $data['txtDescripcion'] . "','" . $data['txtConcepto'] . "');");
    }

    /**
     * Recibe los datos de un movimiento y la cuenta transformando el importe en positivo si fuese negativo y los inserta en la BBDD.
     *
     * @param mixed $data
     * @param integer $idCuenta
     */
    public function insertMovimientoConIdCuentaSeparadoYPositivo($data, $idCuenta) {
        $dblImporte = (double) str_replace(",", ".", str_replace(".", "", $data['txtImporte']));
        if ($dblImporte < 0) {
            $dblImporte = $dblImporte * (-1);
        }
        $this->db->query("insert into movimiento(idCuenta, importe, descripcion, concepto)
        values (" . $idCuenta . "," . $dblImporte . ",'Transferencia " . $data['txtDescripcion'] . "','" . $data['txtConcepto'] . "');");
    }

    /**
     * Carga los datos de el ultimo movimento realizado.
     *
     * @return integer
     */
    public function getLastMovimiento() {
        $query = $this->db->query(" select id from movimiento order by id desc limit 1  ");
        $idMovimiento = $query->row_array();
        return $idMovimiento['id'];
    }

    /**
     * Carga los datos de un movimiento y lo devuelve en forma de array de objetos.
     *
     * @param integer $idMovimiento
     * @return mixed
     */
    public function infoRecibo($idMovimiento) {
        $this->db->select('cuenta.codigoEntidad, cuenta.codigoOficina, cuenta.codigoControl, cuenta.codigoCuenta, date_format(movimiento.fecha, "%d/%m/%Y") as fecha, movimiento.importe, movimiento.descripcion, ifnull(movimiento.concepto, "") as concepto', false);
        $this->db->from('movimiento, cuenta');
        $this->db->where('movimiento.idCuenta = cuenta.id');
        $this->db->where('movimiento.id = ' . $idMovimiento);
        return $this->db->get()->result();
    }

    /**
     * Carga los datos de un cliente un identificador de cuenta
     *
     * @param integer $idCuenta
     * @return mixed
     */
    public function getIdClienteByIdCuenta($idCuenta) {
        $this->db->select('idCliente', false);
        $this->db->from('cuentacliente');
        $this->db->where('cuentacliente.idCuenta = ' . $idCuenta);
        return $this->db->get()->result();
    }

    /**
     * Carga los datos de un cliente segun entidad, oficina, codigo control y codigo cuenta y lo devuelve en forma de array de objetos.
     *
     * @param mixed $data
     * @return mixed
     */
    public function getIdClienteByCuenta($data) {
        $this->db->select('cuentacliente.idCliente', false);
        $this->db->from('cuenta, cuentacliente');
        $this->db->where('cuenta.id = cuentacliente.idCuenta');
        $this->db->where('cuenta.codigoEntidad = ', $data['otraCuentaEntidad']);
        $this->db->where('cuenta.codigoOficina = ', $data['otraCuentaOficina']);
        $this->db->where('cuenta.codigoControl = ', $data['otraCuentaControl']);
        $this->db->where('cuenta.codigoCuenta = ', $data['otraCuentaCuenta']);
        return $this->db->get()->result();
    }

}

?>